#列表页蓝图模块
from flask import Blueprint
from flask import render_template,request,redirect,url_for
from models import House #导入房源信息模型
import math #导入数学模块
#创建蓝图对象
list_page = Blueprint('list_page',__name__)

#创建搜索房源列表路由
@list_page.route('/query',methods=['GET'])
def search_txt_info():
    '''
    编程思路：1.获取url传递的参数，是两种类型，addr和rooms,page分页码
            2.判断是那个类型进行搜索，查询数据库，返回前端结果集，进行渲染
    '''
    #1
    addr = request.args.get('addr')
    rooms = request.args.get('rooms')
    page = int(request.args.get('page',1)) #获取当前分页码
    #2
    if addr:#如果addr有值，则进行地址搜索
        '''1.查询所有包含关键词的记录总数，再能最多分多少页，分页总数'''
        house_num = House.query.filter(House.address == addr).count()  # 查询总房源数
        total_num = math.ceil(house_num / 10)  # 计算总分页码
        '''2.查询当前分页要展示的数据，使用paginate方法实现分页数据查询'''
        result = House.query.filter(House.address == addr).\
                 order_by(House.publish_time.desc()).\
                 paginate(page=page,per_page=10)
        '''3.返回模板四个值：当前关键词，总分页码，当前分页码，Pagination类的对象的属性items'''
        return render_template('search_list.html',
                               house_list=result.items,
                               page_num=result.page,
                               total_num=total_num,addr=addr)

    if rooms:#如果rooms有值，则进行户型搜索

        result = House.query.filter(House.rooms == rooms). \
            order_by(House.publish_time.desc()).limit(20).all()

        return render_template('search_list.html',house_list=result.items)

#创建最新房源列表路由
@list_page.route('/list/pattern/<int:page>',methods=['GET'])
def return_new_list(page):
    '''
    编程思路：1.计算总房源数，总房源数/每页显示的房源数=总分页码，向上取整
            2.查询当前分页要展示的数据，使用paginate方法实现分页数据查询
            3.返回模板三个值：总分页码，当前分页码，Pagination类的对象的属性items
    '''
    house_num = House.query.count()#查询总房源数
    total_num = math.ceil(house_num/10)#计算总分页码
    result = House.query.order_by(House.publish_time.desc()).\
             paginate(page=page,per_page=10)
    return render_template('list_page.html',
                           total_num=total_num,
                           page_num=result.page,house_list=result.items)

#创建热点房源列表路由
@list_page.route('/list/hot_house/<int:page>',methods=['GET'])
def return_hot_list(page):
    '''
    编程思路：1.计算总房源数，总房源数/每页显示的房源数=总分页码，向上取整
            2.查询当前分页要展示的数据，使用paginate方法实现分页数据查询
            3.返回模板三个值：总分页码，当前分页码，Pagination类的对象的属性items
    '''
    house_num = House.query.count()#查询总房源数
    total_num = math.ceil(house_num/10)#计算总分页码
    result = House.query.order_by(House.page_views.desc()).\
             paginate(page=page,per_page=10)
    return render_template('list_page.html',
                           total_num=total_num,
                           page_num=result.page,house_list=result.items)



#处理标题过长和空内容的模块过滤器
def deal_title_over(word):
    if len(word) > 10:
        return word[:10] + '...'
    else:
        return word

def deal_empty(word):
    if word == '' and len(word) == 0:
        return '暂无信息！'
    else:
        return word
#注册系统过滤器里
list_page.add_app_template_filter(deal_title_over,'dealover')
list_page.add_app_template_filter(deal_empty,'dealempty')